#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <functional>
#include <vector>
#include <sys/wait.h>
#include <sys/types.h>
using namespace std;


// void handler(int signum)
// {
//     cout << "segmentation fault" << ' ' << signum << endl;
//     sleep(1);
// }
// int main()
// {
//     signal(SIGSEGV,handler);
//     int* p = nullptr;
//     *p = 100;
//     while(true)
    
//     return 0;
// }


// typedef function<void ()> func;
// vector<func> callback;
// int count = 0;
// void showlog()
// {
//     cout << "这是一个log" << endl;
// }
// void showCount()
// {
//     // cout << "进程捕捉到了一个信号，正在处理中： " << signum << " Pid: " << getpid() << endl;
//     cout << "final count : " << count << endl;
// }
// void logusr()
// {
//     int id = fork();
//     if(id == 0)
//     {
//         execl("/usr/bin/who","who",nullptr);
//         exit(1);
//     }
//     wait(nullptr);
// }
// // 定时器功能
// void catsig(int signum)
// {
//     for(auto& f : callback)
//     {
//         f();
//     }
//     alarm(1);
// }

// int main()
// {
//     signal(SIGALRM,catsig);
//     alarm(1);
//     callback.emplace_back(showlog);
//     callback.emplace_back(showCount);
//     callback.emplace_back(logusr);
//     while(true) count++;
//     return 0;
// }

int count = 0;
void catsig(int signum)
{
    cout << count << endl;
    exit(1);
}

int main()
{
    // 1.验证一秒内，我们会进行多少次count++
    // 为什么只计算到了11w？cout + 网络发送 = IO #IO速度太慢了
    // 2.如果单纯计算算力呢？
    signal(SIGALRM,catsig);
    alarm(1); // 设定了一个闹钟，这个闹钟一旦触发，就自动移除了
    signal(SIGALRM,catsig);
   
    alarm(1);
    while(true)
    {
        count++;
        cout << count << endl;
    }

    return 0;
}
